/**
 * @Author Weton Li
 * @Date 2021/3/16 20:09
 */
public class Demo01 {


    public static ListNode reverseListNode(ListNode head) {

//        ListNode sentinel = new ListNode(-1);

        // 临时保存的下一个节点，断链防止下一节点丢失
        ListNode tempNextNode = null;
        // 前指针
        ListNode prev = null;
        // 当前节点，初始指向头结点
        ListNode curr = head;

        // 当前节点不为空时循环遍历
        while (curr != null) {
            tempNextNode = curr.next; // 每次循环临时保存下一节点，防止丢失
            curr.next = prev; // 将当前节点指向前一个节点
            prev = curr; // 前指针后移
            curr = tempNextNode; // 当前节点后移
        }

        return prev;
    }

    public static void main(String[] args) {
        // 1->2->3->4->5->NULL

        ListNode listNode1 = new ListNode(1);
        ListNode listNode2 = new ListNode(2);
        ListNode listNode3 = new ListNode(3);
        ListNode listNode4 = new ListNode(4);
        ListNode listNode5 = new ListNode(5);

        listNode1.next = listNode2;
        listNode2.next = listNode3;
        listNode3.next = listNode4;
        listNode5.next = listNode5;
        listNode5.next = null;


        printListNode(listNode1);
        ListNode head = reverseListNode(listNode1);

        printListNode(head);
    }

    public static void printListNode(ListNode head){

        ListNode curr = head;

        while (curr != null) {
            System.out.print(curr.val+"->");
            curr = curr.next;
        }
        System.out.println("null");
    }
}

class ListNode {

    ListNode next;
    int val;

    public ListNode(ListNode next, int val) {
        this.next = next;
        this.val = val;
    }

    public ListNode(int val) {
        this.val = val;
    }

    public ListNode() {

    }

}